﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Iacym.Entities;
using System.Data;
using System.Data.Objects;
using System.Data.SqlClient;
using System.Text.RegularExpressions;

namespace Iacym.Repository
{
    public class PersonaRepository : MasterRepository, IPersonaRepository
    {
        public List<PERSONA> GetAllFromPersona()
        {
            IQueryable<PERSONA> query =
                new EnumerableQuery<PERSONA>(
                    from c in
                        context.PERSONAs.Include("ESTADO_CIVIL")
                            .Include("UBIGEO")
                            .Include("DISCIPULADOR")
                            .Include("SEXO")
                    orderby c.NroMembresia ascending
                    select c);

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            //query.ToList().OrderBy(p => p.NroMembresia);
            return query.ToList();
        }

        public List<PERSONA> GetAllFromPersonaByFechaNac(int fecNacIni, int fecNacFin)
        {
            var query = from c in context.PERSONAs
                        //where EntityFunctions.TruncateTime(c.FechaNacimiento) >= fecNacIni.Date && EntityFunctions.TruncateTime(c.FechaNacimiento) <= fecNacFin.Date
                        where c.FechaNacimiento.Month > fecNacIni && c.FechaNacimiento.Month <= fecNacFin && c.Estado == true
                        orderby c.FechaNacimiento.Day
                        select c;
            return query.ToList();
        }

        public void AddPersona(PERSONA persona)
        {
            //personaDB.FechaBautizo = string.IsNullOrEmpty(persona.FechaBautizo) ? "" : persona.FechaBautizo;
            persona.Observacion = string.IsNullOrEmpty(persona.Observacion) ? "" : persona.Observacion.ToUpper();
            //persona.FechaTransferencia = string.IsNullOrEmpty(persona.FechaTransferencia) ? "" : persona.FechaTransferencia;
            //persona.FechaConversion = string.IsNullOrEmpty(persona.FechaConversion) ? "" : persona.FechaConversion;
            //persona.FechaMuerte = string.IsNullOrEmpty(persona.FechaMuerte) ? "" : persona.FechaMuerte;
            persona.Email = string.IsNullOrEmpty(persona.Email) ? "" : persona.Email.ToLower();
            persona.Servicios = string.IsNullOrEmpty(persona.Servicios) ? "" : persona.Servicios.ToUpper();

            foreach (var item in persona.PERSONA_PROFESION)
            {
                item.PROFESION = null;
                //context.Entry(item.PROFESION).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }

            foreach (var item in persona.PERSONA_ESPECIALIDAD)
            {
                item.ESPECIALIDAD = null;
                //context.Entry(item.ESPECIALIDAD).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }

            foreach (var item in persona.TRABAJOes)
            {
                item.CARGO = null;
                item.EMPRESA = null;
                //context.Entry(item.CARGO).State = EntityState.Unchanged;
                //context.Entry(item.EMPRESA).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }

            foreach (var item in persona.TELEFONOS)
            {
                item.LINEA_TELEFONICA = null;
                context.Entry(item).State = EntityState.Added;
            }

            foreach (var item in persona.PERSONA_IDIOMAS)
            {
                item.IDIOMA = null;
                context.Entry(item).State = EntityState.Added;
            }

            //registramos a la persona
            persona.SEXO = null;
            persona.ESTADO_CIVIL = null;

            persona.DISCIPULADOR = null;
            persona.UBIGEO = null;
            persona.IGLESIA = null;
            persona.CELULA = null;

            //context.USUARIOs.Add(persona.USUARIO);
            context.PERSONAs.Add(persona);
            context.SaveChanges();
        }

        public void UpdatePersona(PERSONA persona)
        {
            var personaDB = context.PERSONAs.Find(persona.Id);

            personaDB.Observacion = string.IsNullOrEmpty(persona.Observacion) ? "" : persona.Observacion.ToUpper();
            personaDB.Email = string.IsNullOrEmpty(persona.Email) ? "" : persona.Email.ToLower();
            personaDB.Direccion = string.IsNullOrEmpty(persona.Direccion) ? "" : persona.Direccion;
            personaDB.Dni = persona.Dni;
            personaDB.ApePaterno = persona.ApePaterno;
            personaDB.ApeMaterno = persona.ApeMaterno;
            personaDB.Nombres = persona.Nombres;
            personaDB.FechaNacimiento = persona.FechaNacimiento;
            personaDB.DISCIPULADOR = context.PERSONAs.Find(persona.DiscipuladorId);
            personaDB.DiscipuladorId = persona.DiscipuladorId;
            personaDB.CELULA = context.CELULAs.Find(persona.CelulaId);
            personaDB.CelulaId = persona.CelulaId;
            personaDB.ESTADO_CIVIL = persona.ESTADO_CIVIL;
            personaDB.EstadoCivilId = persona.EstadoCivilId;
            personaDB.SEXO = persona.SEXO;
            personaDB.SexoId = persona.SexoId;
            personaDB.UBIGEO = persona.UBIGEO;
            personaDB.UbigeoId = persona.UbigeoId;
            personaDB.IGLESIA = context.IGLESIAs.Find(persona.IglesiaId);
            personaDB.IglesiaId = persona.IglesiaId;
            personaDB.NoCreyente = persona.NoCreyente;
            personaDB.Local = persona.Local;
            personaDB.Transferencia = persona.Transferencia;
            personaDB.Transferido = persona.Transferido;
            personaDB.FechaTransferencia = persona.FechaTransferencia;
            personaDB.FechaBautizo = persona.FechaBautizo;
            personaDB.FechaConversion = persona.FechaConversion;
            personaDB.FechaMuerte = persona.FechaMuerte;
            personaDB.FechaNoMiembro = persona.FechaNoMiembro;
            personaDB.NroMembresia = persona.NroMembresia;
            personaDB.FOTO_PERSONA = persona.FOTO_PERSONA;
            personaDB.Estado = persona.Estado;
            personaDB.Muerte = persona.Muerte;
            personaDB.CargoMinisterio = persona.CargoMinisterio;
            personaDB.Servicios = persona.Servicios;

            foreach (var item in persona.PERSONA_PROFESION)
            {
                item.PROFESION = null;
                if (item.Id.Equals(0))
                {
                    item.PersonaId = persona.Id;
                    context.Entry(item).State = EntityState.Added;
                    personaDB.PERSONA_PROFESION.Add(item);
                }
                else
                {
                    context.PERSONA_PROFESION.Attach(item);
                    context.Entry(item).State = System.Data.EntityState.Modified;
                }
            }

            foreach (var item in persona.PERSONA_ESPECIALIDAD)
            {
                item.ESPECIALIDAD = null;
                if (item.Id.Equals(0))
                {
                    item.PersonaId = persona.Id;
                    context.Entry(item).State = EntityState.Added;
                    personaDB.PERSONA_ESPECIALIDAD.Add(item);
                }
                else
                {
                    context.PERSONA_ESPECIALIDAD.Attach(item);
                    context.Entry(item).State = EntityState.Modified;
                }
            }

            foreach (var item in persona.TELEFONOS)

            {
                item.LINEA_TELEFONICA = null;
                if (item.Id.Equals(0))
                {
                    //context.Entry(item.PERSONA).
                    item.PERSONA = personaDB;
                    item.LINEA_TELEFONICA = context.LINEA_TELEFONICA.Find(item.LineaId);
                    context.Entry(item).State = EntityState.Added;
                    personaDB.TELEFONOS.Add(item);
                }
                else
                {
                    context.TELEFONOS.Attach(item);
                    context.Entry(item).State = EntityState.Modified;
                }
            }

            foreach (var item in persona.TRABAJOes)
            {
                if (item.Id.Equals(0))
                {
                    item.PERSONA = personaDB;
                    context.Entry(item).State = EntityState.Added;
                    personaDB.TRABAJOes.Add(item);

                }
                else
                {
                    context.TRABAJOes.Attach(item);
                    context.Entry(item).State = EntityState.Modified;
                }
            }

            foreach (var item in persona.PERSONA_IDIOMAS)
            {
                if (item.Id.Equals(0))
                {
                    item.PersonaId = persona.Id;
                    context.Entry(item).State = EntityState.Added;
                    personaDB.PERSONA_IDIOMAS.Add(item);
                }
                else
                {
                    context.PERSONA_IDIOMAS.Attach(item);
                    context.Entry(item).State = EntityState.Modified;
                }
            }

            if (personaDB.FOTO_PERSONA.Hash != null)
                context.Entry(personaDB.FOTO_PERSONA).State = EntityState.Modified;
            context.Entry(personaDB).State = EntityState.Modified;
            context.SaveChanges();
        }

        public void DeletePersona(int id)
        {
            throw new NotImplementedException();
        }


        public PERSONA GetFromPersonaById(int id)
        {
            var query = from c in context.PERSONAs
                        where c.Id.Equals(id)
                        select c;
            return query.SingleOrDefault();
        }


        /*public PERSONA GetAllFromPersonaById(int id)
        {
            throw new NotImplementedException();
        }*/


        public bool ExistImagenHash(string hash, int id)
        {
            var query = from p in context.FOTO_PERSONA
                        where p.Hash.ToUpper().CompareTo(hash.ToUpper()) == 0 && p.PersonaId != id
                        select p;
            return query.Any();
        }


        public PERSONA GetFromPersonaByDni(string dni)
        {
            var query = from c in context.PERSONAs.Include("USUARIO")
                        where c.Dni.Equals(dni)
                        select c;
            return query.SingleOrDefault();
        }

        public List<PERSONA> GetFromPersonaByDescripcion(string descripcion)
        {
            if (descripcion != "")
            {
                var query =
                    from c in
                        context.PERSONAs.Include("ESTADO_CIVIL")
                            .Include("SEXO")
                            .Include("DISCIPULADOR")
                            .Include("USUARIO")
                    where c.ApeMaterno.ToUpper().Contains(descripcion.ToUpper())
                          || c.ApePaterno.ToUpper().Contains(descripcion.ToUpper())
                          || c.Nombres.ToUpper().Contains(descripcion.ToUpper())
                          || c.Dni.ToUpper().Contains(descripcion.ToUpper())
                          || (c.ApePaterno.ToUpper() + " " + c.ApeMaterno.ToUpper()).Contains(descripcion.ToUpper())
                          || (c.ApePaterno.ToUpper() + " " + c.Nombres.ToUpper()).Contains(descripcion.ToUpper())
                          || (c.ApeMaterno.ToUpper() + " " + c.Nombres.ToUpper()).Contains(descripcion.ToUpper())
                          || (c.Nombres.ToUpper() + " " + c.ApeMaterno.ToUpper()).Contains(descripcion.ToUpper())
                          || (c.Nombres.ToUpper() + " " + c.ApePaterno.ToUpper()).Contains(descripcion.ToUpper())
                          || (c.ApePaterno.ToUpper() + " " + c.ApeMaterno.ToUpper() + " " + c.Nombres.ToUpper()).Contains( descripcion.ToUpper())
                    select c;

                return query.ToList();
            }
            else
            {
                var query1 =
                    from c in
                        context.PERSONAs.Include("ESTADO_CIVIL")
                            .Include("SEXO")
                            .Include("DISCIPULADOR")
                            .Include("USUARIO")
                    select c;
                return query1.ToList();
            }
        }

        public void AddPersonaConCargoIglesia(PERSONA persona)
        {
            if (persona.DATOS_TRANSFERENCIA.Count != 0)
            {
                foreach (var item in persona.DATOS_TRANSFERENCIA)
                {
                    item.CARGO_IGLESIA = null;
                    item.PERSONA = null;
                    context.Entry(item).State = EntityState.Added;
                }
            }
            context.Entry(persona).State = EntityState.Unchanged;
            context.SaveChanges();
        }


        public void UpdatePersonaConCargoIglesia(PERSONA persona)
        {
            context.Entry(persona).State = EntityState.Detached;

            foreach (var item in persona.DATOS_TRANSFERENCIA)
            {
                item.CARGO_IGLESIA = null;
                item.PERSONA = null;

                context.Entry(item).State = item.Id ==
                                            Int32.Parse("0")
                    ? EntityState.Added
                    : EntityState.Modified;

                item.CargoIglesiaId = item.CargoIglesiaId;
            }
            context.Entry(persona).State = EntityState.Modified;
            context.SaveChanges();
        }


        public void DeletePersonaConCargoIglesia(int id)
        {
            var existe = context.PERSONAs.Where(p => p.Id.Equals(id)).SingleOrDefault();

            if (existe != null)
            {
                context.PERSONAs.Remove(existe);
                context.SaveChanges();
            }
        }


        public List<PERSONA> GetFromPersonaByDescripcionByCriteriosEspecificos(int idestadocivil, int idsexo, bool nocreyente, bool creyentelocal, /* bool creyentetransferencia, bool creyentetransferido, bool vivo, bool muerto, bool activo, bool noactivo,*/ string descripcion)
        {
            if (idestadocivil != 0)
            {
                if (idsexo != 0)
                {
                    var query = from c in context.PERSONAs.Include("ESTADO_CIVIL").Include("SEXO").Include("DISCIPULADOR")
                                where (c.ApeMaterno.ToUpper().Contains(descripcion.ToUpper())
                                || c.ApePaterno.ToUpper().Contains(descripcion.ToUpper())
                                || c.Nombres.ToUpper().Contains(descripcion.ToUpper())
                                || c.Dni.ToUpper().Contains(descripcion.ToUpper())
                                || (c.ApePaterno.ToUpper() + " " + c.ApeMaterno.ToUpper()).Contains(descripcion.ToUpper())
                                || (c.ApePaterno.ToUpper() + " " + c.Nombres.ToUpper()).Contains(descripcion.ToUpper())
                                || (c.ApeMaterno.ToUpper() + " " + c.Nombres.ToUpper()).Contains(descripcion.ToUpper())
                                || (c.Nombres.ToUpper() + " " + c.ApeMaterno.ToUpper()).Contains(descripcion.ToUpper())
                                || (c.Nombres.ToUpper() + " " + c.ApePaterno.ToUpper()).Contains(descripcion.ToUpper())
                                || (c.ApePaterno.ToUpper() + " " + c.ApeMaterno.ToUpper() + " " + c.Nombres).Contains(descripcion.ToUpper()))
                                & c.EstadoCivilId.Equals(idestadocivil) & c.SexoId.Equals(idsexo) & c.NoCreyente.Equals(nocreyente) & c.Local.Equals(creyentelocal)
                                & c.Transferencia.Equals(creyentelocal) & c.Transferido.Equals(creyentelocal)
                                select c;
                    return query.ToList();
                }
                else if (idsexo == 0)
                {
                    var query =
                        from c in context.PERSONAs.Include("ESTADO_CIVIL").Include("SEXO").Include("DISCIPULADOR")
                        where (c.ApeMaterno.ToUpper().Contains(descripcion.ToUpper())
                               || c.ApePaterno.ToUpper().Contains(descripcion.ToUpper())
                               || c.Nombres.ToUpper().Contains(descripcion.ToUpper())
                               || c.Dni.ToUpper().Contains(descripcion.ToUpper())
                               || (c.ApePaterno.ToUpper() + " " + c.ApeMaterno.ToUpper()).Contains(descripcion.ToUpper())
                               || (c.ApePaterno.ToUpper() + " " + c.Nombres.ToUpper()).Contains(descripcion.ToUpper())
                               || (c.ApeMaterno.ToUpper() + " " + c.Nombres.ToUpper()).Contains(descripcion.ToUpper())
                               || (c.Nombres.ToUpper() + " " + c.ApeMaterno.ToUpper()).Contains(descripcion.ToUpper())
                               || (c.Nombres.ToUpper() + " " + c.ApePaterno.ToUpper()).Contains(descripcion.ToUpper())
                               || (c.ApePaterno.ToUpper() + " " + c.ApeMaterno.ToUpper() + " " + c.Nombres).Contains(descripcion.ToUpper()))
                               & c.EstadoCivilId.Equals(idestadocivil) & c.NoCreyente.Equals(nocreyente) & c.Local.Equals(creyentelocal)
                               & c.Transferencia.Equals(creyentelocal) & c.Transferido.Equals(creyentelocal)
                        select c;
                    return query.ToList();
                }
                else
                {
                    var query = from c in context.PERSONAs.Include("ESTADO_CIVIL").Include("SEXO").Include("DISCIPULADOR")
                                select c;
                    return query.ToList();
                }
            }
            else if (idestadocivil == 0)
            {
                if (idsexo != 0)
                {
                    var query = from c in context.PERSONAs.Include("ESTADO_CIVIL").Include("SEXO").Include("DISCIPULADOR")
                                where (c.ApeMaterno.ToUpper().Contains(descripcion.ToUpper())
                                || c.ApePaterno.ToUpper().Contains(descripcion.ToUpper())
                                || c.Nombres.ToUpper().Contains(descripcion.ToUpper())
                                || c.Dni.ToUpper().Contains(descripcion.ToUpper())
                                || (c.ApePaterno.ToUpper() + " " + c.ApeMaterno.ToUpper()).Contains(descripcion.ToUpper())
                                || (c.ApePaterno.ToUpper() + " " + c.Nombres.ToUpper()).Contains(descripcion.ToUpper())
                                || (c.ApeMaterno.ToUpper() + " " + c.Nombres.ToUpper()).Contains(descripcion.ToUpper())
                                || (c.Nombres.ToUpper() + " " + c.ApeMaterno.ToUpper()).Contains(descripcion.ToUpper())
                                || (c.Nombres.ToUpper() + " " + c.ApePaterno.ToUpper()).Contains(descripcion.ToUpper())
                                || (c.ApePaterno.ToUpper() + " " + c.ApeMaterno.ToUpper() + " " + c.Nombres).Contains(descripcion.ToUpper()))
                                & c.SexoId.Equals(idsexo) & c.NoCreyente.Equals(nocreyente) & c.Local.Equals(creyentelocal)
                                & c.Transferencia.Equals(creyentelocal) & c.Transferido.Equals(creyentelocal)
                                select c;
                    return query.ToList();
                }
                else if (idsexo == 0)
                {
                    var query = from c in context.PERSONAs.Include("ESTADO_CIVIL").Include("SEXO").Include("DISCIPULADOR")
                                where (c.ApeMaterno.ToUpper().Contains(descripcion.ToUpper())
                                || c.ApePaterno.ToUpper().Contains(descripcion.ToUpper())
                                || c.Nombres.ToUpper().Contains(descripcion.ToUpper())
                                || c.Dni.ToUpper().Contains(descripcion.ToUpper())
                                || (c.ApePaterno.ToUpper() + " " + c.ApeMaterno.ToUpper()).Contains(descripcion.ToUpper())
                                || (c.ApePaterno.ToUpper() + " " + c.Nombres.ToUpper()).Contains(descripcion.ToUpper())
                                || (c.ApeMaterno.ToUpper() + " " + c.Nombres.ToUpper()).Contains(descripcion.ToUpper())
                                || (c.Nombres.ToUpper() + " " + c.ApeMaterno.ToUpper()).Contains(descripcion.ToUpper())
                                || (c.Nombres.ToUpper() + " " + c.ApePaterno.ToUpper()).Contains(descripcion.ToUpper())
                                || (c.ApePaterno.ToUpper() + " " + c.ApeMaterno.ToUpper() + " " + c.Nombres).Contains(descripcion.ToUpper()))
                                & c.NoCreyente.Equals(nocreyente) & c.Local.Equals(creyentelocal) & c.Transferencia.Equals(creyentelocal)
                                & c.Transferido.Equals(creyentelocal)
                                select c;
                    return query.ToList();
                }
                else
                {
                    var query = from c in context.PERSONAs.Include("ESTADO_CIVIL").Include("SEXO").Include("DISCIPULADOR")
                                select c;
                    return query.ToList();
                }
            }
            else
            {
                var query = from c in context.PERSONAs.Include("ESTADO_CIVIL").Include("SEXO").Include("DISCIPULADOR")
                            select c;
                return query.ToList();
            }
        }


        public List<PERSONA> GetFromPersonaByEspecialidad(string descripcion)
        {
            if (descripcion != null)
            {
                var query = from c in context.PERSONA_ESPECIALIDAD.Include("ESPECIALIDAD").Include("PERSONA.DISCIPULADOR").Include("PERSONA.ESTADOCIVIL").Include("PERSONA.UBIGEO")
                            .Include("PERSONA.SEXO")
                            where c.ESPECIALIDAD.Descripcion.Contains(descripcion)
                            select c.PERSONA;

                return query.ToList();
            }
            else
            {
                var query1 = from c in context.PERSONAs.Include("ESTADO_CIVIL").Include("UBIGEO").Include("DISCIPULADOR").Include("SEXO").Include("DATOS_TRANSFERENCIA.CARGO_IGLESIA")
                             select c;
                return query1.ToList();
            }
        }

        public List<PERSONA> GetFromPersonaByProfesion(string descripcion)
        {
            if (descripcion != null)
            {
                var query = from c in context.PERSONA_PROFESION.Include("PROFESION").Include("PERSONA.DISCIPULADOR").Include("PERSONA.ESTADOCIVIL").Include("PERSONA.UBIGEO")
                            .Include("PERSONA.SEXO")
                            where c.PROFESION.Descripcion.Contains(descripcion)
                            select c.PERSONA;

                return query.ToList();
            }
            else
            {
                var query1 = from c in context.PERSONAs.Include("ESTADO_CIVIL").Include("UBIGEO").Include("DISCIPULADOR").Include("SEXO").Include("DATOS_TRANSFERENCIA.CARGO_IGLESIA")
                             select c;
                return query1.ToList();
            }
        }

        public List<PERSONA> GetFromPersonaByCargo(string descripcion)
        {
            if (descripcion != null)
            {
                var query = from c in context.TRABAJOes.Include("CARGO").Include("PERSONA.DISCIPULADOR").Include("PERSONA.ESTADOCIVIL").Include("PERSONA.UBIGEO")
                            .Include("PERSONA.SEXO")
                            where c.CARGO.Descripcion.Contains(descripcion)
                            select c.PERSONA;

                return query.ToList();
            }
            else
            {
                var query1 = from c in context.PERSONAs.Include("ESTADO_CIVIL").Include("UBIGEO").Include("DISCIPULADOR").Include("SEXO").Include("DATOS_TRANSFERENCIA.CARGO_IGLESIA")
                             select c;
                return query1.ToList();
            }
        }

        public List<PERSONA> GetFromPersonaByEmpresa(string descripcion)
        {
            if (descripcion != null)
            {
                var query = from c in context.TRABAJOes.Include("EMPRESA").Include("PERSONA.DISCIPULADOR").Include("PERSONA.ESTADOCIVIL").Include("PERSONA.UBIGEO")
                            .Include("PERSONA.SEXO")
                            where c.EMPRESA.Descripcion.Contains(descripcion)
                            select c.PERSONA;

                return query.ToList();
            }
            else
            {
                var query1 = from c in context.PERSONAs.Include("ESTADO_CIVIL").Include("UBIGEO").Include("DISCIPULADOR").Include("SEXO").Include("DATOS_TRANSFERENCIA.CARGO_IGLESIA")
                             select c;
                return query1.ToList();
            }
        }

        public List<PERSONA> GetFromPersonaByIdioma(string descripcion)
        {
            if (descripcion != null)
            {
                var query = from c in context.PERSONA_IDIOMAS.Include("IDIOMA").Include("PERSONA.DISCIPULADOR").Include("PERSONA.ESTADOCIVIL").Include("PERSONA.UBIGEO")
                            .Include("PERSONA.SEXO")
                            where c.IDIOMA.Descripcion.Contains(descripcion)
                            select c.PERSONA;

                return query.ToList();
            }
            else
            {
                var query1 = from c in context.PERSONAs.Include("ESTADO_CIVIL").Include("UBIGEO").Include("DISCIPULADOR").Include("SEXO").Include("DATOS_TRANSFERENCIA.CARGO_IGLESIA")
                             select c;
                return query1.ToList();
            }
        }


        public PERSONA GetFromPersonaByNroMembresia(int membresia)
        {
            var query = from c in context.PERSONAs
                        where c.NroMembresia.Equals(membresia)
                        select c;
            return query.SingleOrDefault();
        }


        public bool DuplicidadPersona(string dni, int id)
        {
            if (dni.CompareTo("00000000") != 0)
            {
                var query = from p in context.PERSONAs
                            where p.Dni.CompareTo(dni) == 0 && p.Id != id
                            select p;
                return query.Any();
            }
            else
                return false;
        }


        public List<PERSONA> GetFromPersonaByDiscipulador(int id)
        {
            var query = from c in context.PERSONAs
                        where c.DiscipuladorId.Equals(id)
                        select c;
            return query.ToList();
        }
    }
}
